package 字符串;

import java.util.Map;

/**
 * 重写13题
 * 罗马字符转整数
 *
 * 此题关键点：每一个罗马数字最多只有两位，如果不清楚这个概念，那么需要先了解罗马字符的规则，
 *
 * 思路：
 *  1：先把罗马字符使用Map保存起来；
 *  2：遍历字符串做对比，
 *   通过规则可以发现，如果下一个字符比当前字符大，那么结果肯定是累加下一个字符的值减去当前字符的值，并且需要跳过下一个字符；
 *   反之，结果加当前位置上的字符之即可；
 */
public class L_13_1 {

    public static Map<Character, Integer> romanMap = null;

    {
        romanMap = Map.of(
                'I', 1,
                'V', 5,
                'X', 10,
                'L', 50,
                'C', 100,
                'D', 500,
                'M', 1000
        );
    }
    public int romanToInt(String s) {
        if(s == null || s.length() == 0){
            return 0;
        }
        int res =0;
        for (int i = 0; i < s.length(); i++) {
            // 如果下一个字符比当前字符大
            if(i+1 < s.length() && romanMap.get(s.charAt(i+1)) > romanMap.get(s.charAt(i))){
                res += romanMap.get(s.charAt(i+1)) - romanMap.get(s.charAt(i));
                i++; // 跳过下一个
            }else {
                res += romanMap.get(s.charAt(i));
            }
        }
        return res;
    }
}
